﻿using System;
using System.Collections.Generic;
using System;
using System.Collections;
using System.Linq;
using System.Text;


/// <summary>
/// 按钮的映射
/// int keyvalue = VrtualKeyMap.Instance().GetKeyMap("VK_A");
/// </summary>

class VrtualKeyMap
{
        public static VrtualKeyMap Static_VrtualKeyMap;
        private static Hashtable keymap;
        private VrtualKeyMap()
        {
            keymap = new Hashtable();
            init();
        }
        //实例化
        public static VrtualKeyMap Instance()
        {
            if (Static_VrtualKeyMap == null)
            {
                return new VrtualKeyMap();
            }
            return Static_VrtualKeyMap;
        }

        //初始化
        private void init()
        {
            keymap.Add("VK_LBUTTON", 1);//鼠标左键 
            keymap.Add("VK_RBUTTON", 2);// 鼠标右键 
            keymap.Add("VK_CANCEL", 3);//Ctrl+Break(通常不需要处理) 
            keymap.Add("VK_MBUTTON", 4);// 鼠标中键 
            keymap.Add("VK_BACK", 8);//Backspace 
            keymap.Add("VK_TAB", 9);//Tab 
            keymap.Add("VK_CLEAR", 12);//Num Lock关闭时的数字键盘5 
            keymap.Add("VK_ENTER", 13);//Enter(或者另一个) 
            keymap.Add("VK_SHIFT", 16);//Shift(或者另一个) 
            keymap.Add("VK_CTRL", 17);// Ctrl(或者另一个） 
            keymap.Add("VK_ALT", 18);//Alt(或者另一个) 
            keymap.Add("VK_PAUSE", 19);//Pause 
            keymap.Add("VK_CAPITAL", 20);//Caps Lock 
            keymap.Add("VK_ESC", 27);//Esc 
            keymap.Add("VK_SPACE", 32);//Spacebar 
            keymap.Add("VK_PRIOR", 33);//Page Up 
            keymap.Add("VK_NEXT", 34);//Page Down 
            keymap.Add("VK_END", 35);//End 
            keymap.Add("VK_HOME", 36);//Home 
            keymap.Add("VK_LEFT", 37);//左箭头 
            keymap.Add("VK_UP", 38);//上箭头 
            keymap.Add("VK_RIGHT", 39);//右箭头 
            keymap.Add("VK_DOWN", 40);//下箭头 
            keymap.Add("VK_SELECT", 41);//可选 
            keymap.Add("VK_PRINT", 42);//可选 
            keymap.Add("VK_EXECUTE", 43);//可选 
            keymap.Add("VK_SNAPSHOT", 44);//Print Screen 
            keymap.Add("VK_INSERT", 45);//Insert 
            keymap.Add("VK_DELETE", 46);//Delete 
            keymap.Add("VK_HELP", 47);//可选

            keymap.Add("NUN_0", 48);//主键盘上的0 
            keymap.Add("NUN_1", 49);//主键盘上的1
            keymap.Add("NUN_2", 50);//主键盘上的2
            keymap.Add("NUN_3", 51);//主键盘上的3
            keymap.Add("NUN_4", 52);//主键盘上的4
            keymap.Add("NUN_5", 53);//主键盘上的5
            keymap.Add("NUN_6", 54);//主键盘上的6
            keymap.Add("NUN_7", 55);//主键盘上的7
            keymap.Add("NUN_8", 56);//主键盘上的8
            keymap.Add("NUN_9", 57);//主键盘上的9

            keymap.Add("VK_A", 65);//主键盘上的A
            keymap.Add("VK_B", 66);//主键盘上的B
            keymap.Add("VK_C", 67);//主键盘上的C
            keymap.Add("VK_D", 68);//主键盘上的D
            keymap.Add("VK_E", 69);//主键盘上的E
            keymap.Add("VK_F", 70);//主键盘上的F
            keymap.Add("VK_G", 71);//主键盘上的G
            keymap.Add("VK_H", 72);//主键盘上的H
            keymap.Add("VK_I", 73);//主键盘上的I
            keymap.Add("VK_J", 74);//主键盘上的J
            keymap.Add("VK_K", 75);//主键盘上的K
            keymap.Add("VK_L", 76);//主键盘上的L
            keymap.Add("VK_M", 77);//主键盘上的M
            keymap.Add("VK_N", 78);//主键盘上的N
            keymap.Add("VK_O", 79);//主键盘上的O
            keymap.Add("VK_P", 80);//主键盘上的P
            keymap.Add("VK_Q", 81);//主键盘上的Q
            keymap.Add("VK_R", 82);//主键盘上的R
            keymap.Add("VK_S", 83);//主键盘上的S
            keymap.Add("VK_T", 84);//主键盘上的T
            keymap.Add("VK_U", 85);//主键盘上的U
            keymap.Add("VK_V", 86);//主键盘上的V
            keymap.Add("VK_W", 87);//主键盘上的W
            keymap.Add("VK_X", 88);//主键盘上的X
            keymap.Add("VK_Y", 89);//主键盘上的Y
            keymap.Add("VK_Z", 90);//主键盘上的Z

            keymap.Add("VK_LWIN", 91);//左Windows键  
            keymap.Add("VK_RWIN", 92);//右Windows键  
            keymap.Add("VK_APPS", 93);//Applications键 

            keymap.Add("NUMPAD_0", 96);//数字键盘上的0 
            keymap.Add("NUMPAD_1", 97);//数字键盘上的1 
            keymap.Add("NUMPAD_2", 98);//数字键盘上的2 
            keymap.Add("NUMPAD_3", 99);//数字键盘上的3 
            keymap.Add("NUMPAD_4", 100);//数字键盘上的4 
            keymap.Add("NUMPAD_5", 101);//数字键盘上的5 
            keymap.Add("NUMPAD_6", 102);//数字键盘上的6 
            keymap.Add("NUMPAD_7", 103);//数字键盘上的7 
            keymap.Add("NUMPAD_8", 104);//数字键盘上的8 
            keymap.Add("NUMPAD_9", 105);//数字键盘上的9 

            keymap.Add("VK_NULTIPLY", 106);//数字键盘上的* 
            keymap.Add("VK_ADD", 107);//数字键盘上的+ 
            keymap.Add("VK_SEPARATOR", 108);//可选 
            keymap.Add("VK_SUBTRACT", 109);//数字键盘上的- 
            keymap.Add("VK_DECIMAL", 110);//数字键盘上的. 
            keymap.Add("VK_DIVIDE", 111);//数字键盘上的/ 

            keymap.Add("VK_F1", 112);//功能键F1
            keymap.Add("VK_F2", 113);//功能键F2
            keymap.Add("VK_F3", 114);//功能键F3
            keymap.Add("VK_F4", 115);//功能键F4
            keymap.Add("VK_F5", 116);//功能键F5
            keymap.Add("VK_F6", 117);//功能键F6
            keymap.Add("VK_F7", 118);//功能键F7
            keymap.Add("VK_F8", 119);//功能键F8
            keymap.Add("VK_F9", 120);//功能键F9
            keymap.Add("VK_F10", 121);//功能键F10
            keymap.Add("VK_F11", 122);//功能键F11
            keymap.Add("VK_F12", 123);//功能键F12

            keymap.Add("VK_NUMLOCK", 144);//  Num Lock 
            keymap.Add("VK_SCROLL", 145);//  Num Lock 
        }
        //获取按键键值
        public int GetKeyMap(string keystr)
        {
            int value = -1;
            if (keymap.Contains(keystr))
            {
                value = (int)keymap[keystr];
            }
            return value;
        }
}

